Состояние EFI в 2016

TL;DR -- жить можна

Решил я поставить Linux на Mac. Во-первых чтобы проверить какая разница между HFS+ и BTRFS на аппенде (впринципе можно и ZFS накатить, на последние Ubuntu это делается, правда там же zfs маунт несовместимый, зато дедупликация есть, но EFI драйвера ZFS наверно не скоро появятся), а во-вторых чтобы расчистить свои завалы. А то уже жался на пятачке в несколько Гб. Скопировал все фотки, статьи и накачанные образы на домашний веник и начал читать.

Чтобы поставить Linux, можно и Bootcamp обойтись, но интересно же что нам предлагают open source решения. Их немного, из актуальных только rEFInd и Clover. Первый -- чисто EFI решение, которое может линковаться с двумя основными EFI либами: 1) GNU-EFI 2) Tianocore EDK2 от Intel. Кроме того может собираться и под Mac и под Linux. Вообщем взрослая штука, чистенькая. Clover показался карго культом, но почитав подробнее я поонял, что там больше ориентируются на совместимость с legacy машиными с BIOS и MBR. Поверьте, имея EFI вся эта хуйня уже не нужна.

GNU-EFI библиотека предлагает базовые штуки, в то время как Tianocore предлагает не только способы линковки, но и целые утилиты-расширения, такие например как EFI Shell, Memtest86 или PXE Boot. Зато GNU-EFI меньше гораздо. А шелл там все равно рагульский похожий на command.com, правда с хекс эдиторами и скриптами, без edlin или той хуйни что была в OpenFirmware. Сразу представил себе Erlang в виде UEFI шелла. Сделать можно -- продать невозможно :-)

А что, представьте себе эрланг, который работает поверх EFI. Драйвера файловых систем в refind надерганы с линукса, поэтому я попробовал поставить ubuntu на btrfs, с этим проблем нет. Сеть там тоже есть, но с другой стороны сетка то вся нам не нужна, можно сделать специализированный протокол или тот же LING-овский плановский 9p и делать связь нод EFI-эрлангов без всякого TCP/IP. Но это такое, фантазии. Да и файловые системы тоже не нужны, думаю из того, что написано под EFI, по любому есть что-то, что предоставляяет возможность как-то работать напрямую с SSD контроллером. Поэтому достаточно в эрланге иметь только это, а prim_file и prim_inet ненужны особо.

Значи, чтобы поставить EFI бутлоадер, надо загрузится в Command+R (т.е. стартануть с Apple Recovery HD, где будут находится все лоадеры всех EFI систем, еще этот раздел обычно называется ESP (EFI System Partition). Качаем бинарный дистрибутив rEFInd (можно и собрать), ставим его, он как раз в процессе инсталла копирует файлы на ESP. Потом с помощью efibootmgr или bless ставит метку что грузится нада с ESP теперь. После того как поставили rEFInd, пишем на флешку Ubuntu и грузимся с бутменю rEFInd, и выбираем Ubuntu. В ней выбираем и форматируем раздел:

Когда убунту поставится поставит флаг загрузки на свой раздел в EFI, поэтому нужно будет вернуться в Command+R и сделать Verify Macintosh HD, чтобы он поставил загрузку на себя и потом вернуться в Мак чтобы оттуда еще раз накатить rEFInd (тупо, но так вроде было с примордиальных времен, каждая ОС всегда думает, что она главная и единственная, workaround существует -- поставить rEFInd на системный Macintosh HD). Но я попробовал также собрать rEFInd под линуксом, линковался с GNU-EFI. А EFI Shell спиздил просто с бинарного дистрибутива Tianocore EDK II и положил в папку fs0:/boot/efi/EFI/tools/shellx64.efi

Вот как выглядит моя ESP FAT32 партиция.

/boot/efi ├── BOOTLOG └── EFI ├── APPLE │ ├── CACHES │ ├── EXTENSIONS │ │ └── Firmware.scap │ ├── FIRMWARE │ │ └── MBA61_0099_B22_LOCKED.scap │ └── UPDATERS ├── refind │ ├── drivers_x64 │ │ ├── btrfs_x64.efi │ │ ├── ext2_x64.efi │ │ ├── ext4_x64.efi │ │ ├── hfs_x64.efi │ │ ├── iso9660_x64.efi │ │ ├── LICENSE_GPL.txt │ │ ├── LICENSE.txt │ │ ├── ntfs_x64.efi │ │ └── reiserfs_x64.efi │ ├── icons │ ├── icons-backup │ ├── keys │ ├── refind.conf │ ├── refind.conf-sample │ ├── refind_x64.efi │ ├── snowy │ └── tools_x64 ├── tools │ ├── gptsync_x64.efi │ └── shellx64.efi └── ubuntu ├── fw ├── fwupx64.efi ├── grub.cfg ├── grubx64.efi ├── MokManager.efi └── shimx64.efi

При запуске мне доступен оригинальный интеловский EFI shell, GPTsync утилита и MOK менеджер ключей. Вообщем сюда думаю можно было бы тетрис написать и Erlang. EFI шелл выглядит вот так https://software.intel.com/en-us/articles/uefi-shell, его надо обязательно в файл с окончанием "x64.efi" переименовать. Что такое Firmware Update убутновский я так и не понял fwupx64.efi, неужели эта штука может обновить любой EFI-совместимый BIOS ? Маковский она точно не может, я пробовал.

Пост написан из Ubuntu на Mac. Подумываю еще накатить Windows 10. Из того, что заметил с прошлых времен когда сидел на Ubuntu, это то, что по дефаулту раскладка клавиатуры теперь тут Command+Space.